package com.JackTang.api.druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author Jack Tang
 * @description druid连接池使用类
 * @create 2023-09-03 17:49
 */
public class DruidUserPart {
    /**
     * 直接使用代码设置连接池连接参数方式
     *      1.创建一个druid连接池对象
     *      2.设置连接池 [必须 | 非必须]
     *      3.获取连接 [通用方法，所有连接池都一样]
     *      4.回收连接 [通用方法，所有连接池都一样]
     */
    @Test
    public void testHard() throws SQLException {
        //1.连接池对象
        DruidDataSource dataSource = new DruidDataSource();

        //2.设置参数
        //必须  连接数据库驱动类的全限定符 [注册驱动] | url | password
        dataSource.setUrl("jdbc:mysql://localhost:3306/atguigu");
        dataSource.setUsername("root");
        dataSource.setPassword("hyx520");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); //帮我们进行驱动注册和获取连接
        //非必须  初始化连接数量，最大的连接数量 .....
        dataSource.setInitialSize(5); //初始化的数量
        dataSource.setMaxActive(10); //最大的数量

        //3.获取连接
        Connection conn = dataSource.getConnection();

        //数据库crud

        //回收连接
        conn.close();//连接池提供的连接.close，就是回收连接！
    }

    /**
     * 通过读取外部配置文件的方法，实例化druid连接池对象
     */
    @Test
    public void testSoft() throws Exception {
        //1.读取外部配置文件 Properties
        Properties properties = new Properties();

        //src下的文件，可以使用类加载器提供的方法
        InputStream ips = DruidUserPart.class.getClassLoader().getResourceAsStream("druid.properties");

        properties.load(ips);
        //2.使用连接池工具类的工程模式，创建连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection conn = dataSource.getConnection();
        //数据库crud
        //3.关闭连接
        conn.close();
    }

}